﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Gnosis.Babel
{
    public interface ISelect
        : IStatement
    {
    }

    public interface ISelect<T>
        : ISelect
        where T : ISource, new()
    {
        ISelect<T> All { get; }
        ISelect<T> Distinct { get; }
        ISelect<T> Column(Func<T, IValue> column);
        ISelect<T> Column(Func<T, IValue> column, string alias);
        ISelect<T> Where(IPredicate predicate);
        ISelect<T> GroupBy(Func<T, IValue> column);
        ISelect<T> Having(IPredicate predicate);
        ISelect<T> OrderByAsc(Func<T, IValue> column);
        ISelect<T> OrderByDesc(Func<T, IValue> column);
    }
}
